package LeetCode;

/**
 * 判断是否相交链表，【给定两个链表头节点headA,headB】返回相交链表的起始节点[保留原始结构]
 * 思路：a链表不相交的部分长a，b链表不相交的部分长b，c是相交部分长度。保留原始结构，所以不能改了headAheadB
 * 若两个链表有焦点，两个链表同时向后遍历，若某个链表到达终点，让它从对方链表的表头出发，继续后移，最后两个链表一定会在交点回合，如果没有交点，便是两个同时走到null
 */
public class Num160 {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
         ListNode nodeA=headA;
         ListNode nodeB=headB;
         while(nodeA!=nodeB){
             nodeA=nodeA==null?headB:nodeA.next;
             nodeB=nodeB==null?headA:nodeB.next;
         }
         return nodeA;//无交点一定同时走到null，空和空等，nodeA就是NULL，返回。当有交点，相等时返回的nodeA就是焦点
    }
}
